package com.ray.mapper;

import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.ibatis.annotations.Param;
import org.junit.runners.Parameterized.Parameters;

import com.ray.bean.DeptReachBean;
import com.ray.bean.DisplayViewBean;
import com.ray.bean.DutyBean;
import com.ray.bean.FeedOrderDetailBean;
import com.ray.bean.FeedingAndReportBean;
import com.ray.bean.MaterialTrunoverBean;
import com.ray.bean.MergeBean;
import com.ray.bean.OrderFinishMaterialBean;
import com.ray.bean.OtherWarehouseBean;
import com.ray.bean.ProcedureBean;
import com.ray.bean.ProductionExceptionBean;
import com.ray.bean.ReportBean;
import com.ray.bean.TableData;
import com.ray.bean.TurnOverBea;
import com.ray.bean.TurnoverBean;
import com.ray.bean.WarehouseInOutDetailBean;
import com.ray.bean.WorkshopProductionCycleBean;
import com.ray.exception.ServiceException;
import com.ray.pojo.MyUser;

public interface WorkshopMapper {

	//获取车间生产周期详情信息
	List<WorkshopProductionCycleBean> getWorkshopProductionDetail(Map map);
	
	//获取车间生产周期详情信息
	List<WorkshopProductionCycleBean> getWorkshopProductionDetail2(@Param("company")String company,@Param("workshopName")String workshopName,@Param("productionLine")String productionLine);
	
	//获取车间名称
	List<String> getWorkshopName(Map map);

	//从工序表获取工序名称
	List<String> getProcessNameFromProcess();
	
	//获取工序表详情
	List<ProcedureBean> getProcessDetail(@Param("productionLine")String productionLine,@Param("workshop")String workshop,@Param("procedure")String procedure);
	
	//从车间生产周期表获取车间名称
	List<String> getProductionLineFromCycle();
	
	//获取该车间下所有工序名称
	List<String> getWorkingProcedureName(Map map);

	//获取车间工序产能
	List<ProductionExceptionBean> queryCapacity(Map map);

	//获取车间员工效率 
	List<TableData> getTableData(Map map);
	//获取车间员工效率 数量
	int getTableDataCount(Map map);
	
	
	/***
	 * 获取人员产能信息
	 * @param workShop(车间id)
	 * @param date(结束时间)
	 * @param startDay(开始时间)
	 * @param searchingWhere(搜索条件)
	 * @return
	 */
	List<TableData> getPersonData(Map map);

	//获取部门达成率 
	List<DeptReachBean> getTotal(@Param("deptId")String deptId,@Param("date")String date,@Param("startDay")String startDay,@Param("days") int days,@Param("myUser") MyUser myUser);

	//获取订单尾数信息
	List<DutyBean> getDutyDate(Map map);

	//获取尾数总条数
	int getDutyDateCount(Map map);

	//获取用户尾数数量
	List<DeptReachBean> getDuty(Map map );

	
	List<DeptReachBean> getQualified(Map map);

	//获取拖期订单
	List<DutyBean> getDelayDate(Map map);
	
	//获取拖期数量
	int getDelayDateCount(Map map);

	List<DeptReachBean> getOnTime(Map map);

//	获取七天内拖期订单数
	List<DeptReachBean> getSereven(Map map);

//	获取即将拖期订单
	List<DutyBean> getSoonDelay(Map map);

	//报工插入数据
	void insertReport(@Param("list")List<ReportBean> list);

	//获取排序
	long getMaxSort();

	//获取不合格原因
	List<String> getNoReason(@Param("workShopName")String workShopName, @Param("produce")String produce);

	//获取某车间周转量单个订单数据
	List<TurnOverBea> getTrunover(Map map);

	//获取每个车间周转量
	 List<TurnoverBean> getDeptTurnover(Map map);

	//获取车间七日周转量
	List<DeptReachBean> serverTurnover(Map map);

	//获取投料数腿
	long getOrderCount(@Param("reportBean")ReportBean reportBean);

	//获取工厂名称
	List<String> getFactory(@Param("workShopName")String workShopName);

	//获取设备编号
	List<String> getDeviceId(@Param("workShopName")String workShopName);

	//获取设备名称
	List<String> getDeviceName(@Param("workShopName")String workShopName);

	//获取正在生产的订单号
	List<String> getWorkingOrder(Map map);

	//获取审核订单
	List<ReportBean> getShenHeOrder(@Param("userList")String[] userList);

	//删除订单
	void deleteOder(@Param("idList")String[] idList);

	//审核订单
	void shenHeOrder(@Param("idList")String[] idList,@Param("userName") String userName,@Param("dateString") String dateString);

	//获取前十道不合格工序
	List<DeptReachBean> getTopProcedureException(Map map);
	
	//获取前十种不合格原因
	List<DeptReachBean> getTopNoReasonException(Map map);

	//获取已报工合格数
	long getqualifiedCount(@Param("reportBean")ReportBean reportBean);

	//获取整厂在生产中的订单
//	List<String> getFactoryWorkingOrder(Map map);

	//获取在生产投料数
//	long getFeddingCount(@Param("orderList")List<String> orderList);

	//获取在生产出库数
//	long getOutCount(@Param("orderList")List<String> orderList);

	//获取单个订单在车间周转量
	long getOrderTurnoverCount(@Param("reportBean")ReportBean reportBean);

	//获取车间合并情况
	MergeBean getMerge(@Param("workShopName")String workShopName);

	//获取已报工数
	long getReportCount(@Param("reportBean")ReportBean reportBean);

	//获取订单在车间入库数
	long getInCount(Map map);

	//获取未审核的报工数据条数
	int getRoportNotApprovalDataCount(Map map);

	//获取未审核报工分页数据
	List<ReportBean> getRoportNotApprovalData(Map map);

	//获取制单人id
	String getTouchPeople(@Param("id")String id);

	//审批报工
	void approvalReport(Map map);

	//批量审批报工
	void approvalAllReport(Map map);

	//获取本人报工数据数量
	int getMyRoportDataCount(Map map);

	//获取本人报工数据
	List<ReportBean> getMyRoportData(Map map);

	//删除报工数据
	void deleteReport(Map map);

	//修改报工数据
	void updateReport(@Param("ListReport")List<ReportBean> ListReport);

	//根据typeid找到报工数据
	List<ReportBean> getReportByTypeId(@Param("typeId")String typeId);

	//批量删除
	void deleteAllReport(Map map);

	//获取车间报工加工对象
	List<String> getMachining(Map map);

	//查找谋道工序是否报过工
	List<String> findOrderProcedureRepoortRecore(Map map);

	//根据车间id查找车间加工对象
	String geReportObjectByWorkShopId(@Param("workshopId")String workshopId);

	//获取所有订单总数
//	long orderCount(@Param("orderList")List<String> orderList);

	//获取订单交接出库或交接至客户的数量
	long getOrderOutCount(@Param("reportBean")ReportBean reportBean);

	//查询已经报工完成的订单物料
	List<OrderFinishMaterialBean> getReportFinishOrderDetail(Map map);

	//获取其他车间交接至客户的数量
	long getOtherWorkShopToCoustomCount(@Param("reportBean")ReportBean reportBean);

	//获取车间物料周转条数
	int getWorkShopMaterialCount(Map map);

	//获取车间物料周转数据
	List<MaterialTrunoverBean> getWorkShopMaterialData(Map map);

	//获取本车间没有物料代码的周转数据条数
	int getWorkShopMaterialNotCodeCount(Map map);

    //后去本车间没有物料代码的周转数据
	List<MaterialTrunoverBean> getWorkShopMaterialNotCodeDate(Map map);

	//获取车间物料总价
	Double getWorkShopMaterialSumPrice(Map map);

	//通过其他id删除报工记录
	void deleteReportByOtherId(@Param("otherId")String otherId);


	//获取报工集合
	List<ReportBean> getReportListById(Map map);

	//通过其他id获取报工数据
	List<ReportBean> getReportBeanByOtherId(@Param("otherId")String otherId);

	/**
	 * 保存登录令牌
	 * @param loginToken
	 * @param userId
	 * @param dateString
	 */
	void insertLoginToken(@Param("loginToken")String loginToken, @Param("userId")String userId,@Param("dateString") String dateString);
	/**
	 * 获取正常周转量和部门周转量
	 * @param map
	 * @return
	 */
	List<ProductionExceptionBean> getFactoryTurnover(Map map);
	/**
	 * 查询产能是连续时间表头
	 * @param map
	 * @return
	 */
//	List<String> getDayTitle(Map map);
    /**
     * 新的获取周转量数据
     * @param map
     * @return
     */
	int getTrunoverNewCount(Map map);
	List<TurnoverBean> getTrunoverNew(Map map);
	
	/**
	 * 获取车间遗留数据
	 * @param map
	 * @return
	 */
	int getWorkLeftOverCount(Map map);
	List<TurnoverBean> getWorkLeftOver(Map map);
	
	/**
	 * 获取所有车间的入库数
	 */
	long getOrderAllWorkShopTurnoverCount(@Param("reportBean")ReportBean reportBean);
	
	/**
	 * 通过报工对像查找投料单明细
	 * @param reportBean
	 * @param orderId (订单编号)
	 * @param machining( 加工对象)
	 * @param rowIdenx(行号)
	 * @param reportBean
	 * @return
	 */
	FeedOrderDetailBean getFeedOrderDateilByReportBean(@Param("reportBean")ReportBean reportBean);
	/**
	 * 获取订单物料单位
	 * @param orderId(订单编号)
	 * @param machining(加工对象)
	 * @return
	 */
	List<ReportBean> getMaterialUnit(Map map);
	
	/**
	 *  通过出入库id获取仓库报工的单位
	 * @param otherId(报工关联id)
	 * @return
	 */
	WarehouseInOutDetailBean getWarehouseReportUnitById(@Param("otherId")String otherId);
	
	/**
	 * 通过其他出入库id获取仓库报工的单位
	 * @param otherId(报工关联id)
	 * @return
	 */
	OtherWarehouseBean getOtherWarehouseReportUnitById(@Param("otherId")String otherId);
	/**
	 * 获取车间排单产能
	 * @param month(月份)
	 * @param workShopId(月份)
	 */
	List<WorkshopProductionCycleBean> getWorkshopPaiList(Map map);
	
	 /**
	 * 查询日产能详情
	 * @param workShopId(车间id)
	 * @param day(日期)
	 * @return
	 * @throws ServiceException
	 */
	List<DutyBean> dayCapacityDetail(Map map);
	
	/**
	 * 获取车间周转量
	 */
	List<TurnoverBean> getWorkShopTurnover(Map map);
	/**
	 * 获取显示屏的异常数据
	 * @param deptId(部门id 非必传)
	 * @param workShopId(车间id 非必传)
	 * @param map
	 * @return
	 */
	List<DisplayViewBean> getTrunoverDutyMantissa(Map map);
	/**
	 * 获取交接到成品仓数量
	 * @param reportBean
	 * @return
	 */
	long getFinishCount(@Param("reportBean")ReportBean reportBean);
	  /**
	   * 获取工序审核人员的id
	   * @param id(工序id)
	   * @return
	   */
	List<String> getProcessSpprovelUserIdByProcessId(@Param("id")String id);
	
	/**
	 * 获取登录用户可以审核的工序
	 * @param map
	 * @return
	 */
	List<String> getUserApprovelProcess(Map map);
	
	/**
	 * 申请修改报工
	 * @param id
	 * @param string 
	 * @param i 
	 */
	 void launchUpdateReport(@Param("id")String id,@Param("otherId") String string,@Param("launch") int launch);
	 /**
	  * 整架获取数量
	  * @param reportBean
	  * @return
	  */
	 long getOrderAllWorkShopTurnoverCountMax(@Param("reportBean")ReportBean reportBean);

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	/**
	 *  一下方法仅在定时器发消息时调用
	 */
	  //获取所有车间的拖期异常，发送消息
      public List<ProductionExceptionBean> getTimerDelaySendMessage();
      //获取所有车间即将拖期的订单
      public List<ProductionExceptionBean> getSoonDelaySendMessage();
      //获取所有车间日产能
	  List<ProductionExceptionBean> getCapacitySendMessage(@Param("toDayOrLastDay")String toDayOrLastDay);
      //获取所有尾数异常信息
      List<ProductionExceptionBean> getMantissaSendMessage();
      //获取周转量异常信息
	  List<ProductionExceptionBean> getTurnoverSendMessage();
      /**
       * 获取每日报工公司
       * @param dateString
       * @return
       */
	  List<String> getReportCompany(@Param("date")String date);

	  /**
	   * 获取报工公司数据
	   * @return
	   */
	  List<Map> getAllReportCompanyData(Map map);
      /**
       * 
       * @param dateString
       * @return
       */
	  List<String> getCreateOrderCompany(@Param("date")String dateString);

	  /**
	   * 获取制单公司数据
	   * @param map
	   * @return
	   */
	  List<Map> getCreateOrderCompanyData(Map map);

	  /**
	   * 获取没有审核的类型id
	   * @param map
	   * @return
	   */
   	List<String> getRoportNotApprovalTypeId(Map map);

   	/**
   	 * 获取本人报工的类型id
   	 * @param map
   	 * @return
   	 */
	List<String> getMyRoportTypeId(Map map);

	/**
	 * 获取可审核报工记录的人 
	 * @param map
	 * @param id(id  值为typeID)
	 * @return
	 */
	List<String> getCanApprovalReportUser(Map map);

	/**
	 * 获取外协审核人员
	 * @param getApprovalMap
	 * @return
	 */
	List<String> getPutOutApprovalUserName(Map getApprovalMap);

	/**
	 * 获取订单明细订单数
	 * @param reportBean
	 * @return
	 */
	FeedingAndReportBean getOrderDetailCount(@Param("reportBean")ReportBean reportBean);

	/**
	 * 一级审核
	 * @param map
	 */
	void firstApprovalReport(Map map);

	/**
	 * 设置车间订单异常理由
	 * @param orderId(订单编号)
	 * @param workShopId(车间id)
	 * @param reason(拖期理由)
	 * @return
	 */
	int setWorkShopOrderExceptionReason(Map map);

	/**
	 * 保存物料代码对应的物料类型
	 * @param materialCode
	 * @param materialTypeSet
	 */
	void insertMetrialCodeType(@Param("materialCode")String materialCode,@Param("materialTypeSet") Set<String> materialTypeSet);

	/**
	 * 将公司设置
	 * @param map
	 * @return
	 */
	int updateCompanySetToApprovalAllReport(Map map);

	/**
	 * 获取订单物料类型入库车间
	 * @param orderId
	 * @return
	 */
	List<ReportBean> getOrderMaterialTypeInWorkShop(@Param("orderId")String orderId);

	/**
	 * 获取周转量明细数据
	 * @param map
	 * @return
	 */
	int getTrunoverNewDetailCount(Map map);
	List<TurnoverBean> getTrunoverNewDetail(Map map);




	 



	  


	

	




	






	


}
